﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using UtilityExtensions;
using BOL.Cliente;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;

namespace UILGestion.Admin.Cliente
{
    public partial class ClienteEditForm : System.Web.UI.Page
    {

        public ClienteEditForm()
        {
            bol = new ClienteBL();
        }
        private ClienteBL bol;
        

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                try
                {
                    type.Value = (string)Request.QueryString["type"];
                    internalID.Value = (string)Request.QueryString["id"];
                    paginaAnt.Value = Page.Request.UrlReferrer.AbsoluteUri;
                    menuCtrl1.loadMenuAdmin();
                   FormatForm();

                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
        }


        private void Insert()
        {
            if (EsEmpresaCHK.SelectedValue == "1")
            {
                internalID.Value=bol.AddEmpresa(razonSocialTextBox.Text,
                                 RUCTXT.Text,
                                 telefonoTxt.Text,
                                 celularTXT.Text,
                                 emailTextBox.Text,
                                 webTXT.Text,
                                 faxTXT.Text,
                                 bitActivoCHK.Checked,
                                 estadoDDL.SelectedValue.ToInt(),
                                 correoAlternativoTXT.Text,
                                 comentarioTXT.Text,
                                 direccionTXT.Text,
                                 referenciaTXT.Text,
                                 urbanizaiconTXT.Text,
                                 distritoDDL.SelectedValue.ToInt()).ToString();


            }
            else
            {
                internalID.Value=bol.AddPersona(nombresTXT.Text,
                                    apellidoPatTxt.Text,
                                    apellidoMatTXT.Text,
                                    nacionalidadDDL.SelectedValue.ToInt(),
                                    tipoDocumentoDDL.SelectedValue.ToInt(),
                                    documentoIdentidadTXT.Text,
                                    ocupacionTXT.Text,
                                    GeneroDDL.SelectedValue.ToInt(),
                                    convivienteCHK.Checked,
                                    telefonoTxt.Text,
                                     celularTXT.Text,
                                     emailTextBox.Text,
                                     webTXT.Text,
                                     faxTXT.Text,
                                     estadoCivilDDL.SelectedValue.ToInt(),
                                     bitActivoCHK.Checked,
                                     estadoDDL.SelectedValue.ToInt(),
                                     correoAlternativoTXT.Text,
                                     comentarioTXT.Text,
                                     direccionTXT.Text,
                                     referenciaTXT.Text,
                                     urbanizaiconTXT.Text,
                                     distritoDDL.SelectedValue.ToInt(),
                                     conyyugeTXT.Text,
                                     dniConyugeTXT.Text,
                                     emailConyugeTXT.Text,
                                     telefonoConyugeTXT.Text).ToString();

            }
        }

        private void Update()
        {
            if (EsEmpresaCHK.SelectedValue == "1")
            {
                bol.UpdateEmpresa(internalID.Value.ToInt(),razonSocialTextBox.Text,
                                RUCTXT.Text,
                                 telefonoTxt.Text,
                                 celularTXT.Text,
                                 emailTextBox.Text,
                                 webTXT.Text,
                                 faxTXT.Text,
                                 bitActivoCHK.Checked,
                                 estadoDDL.SelectedValue.ToInt(),
                                 correoAlternativoTXT.Text,
                                 comentarioTXT.Text,
                                 direccionTXT.Text,
                                 referenciaTXT.Text,
                                 urbanizaiconTXT.Text,
                                 distritoDDL.SelectedValue.ToInt());


            }
            else
            {
                bol.UpdatePersona(internalID.Value.ToInt(),
                                    nombresTXT.Text,
                                    apellidoPatTxt.Text,
                                    apellidoMatTXT.Text,
                                    nacionalidadDDL.SelectedValue.ToInt(),
                                    tipoDocumentoDDL.SelectedValue.ToInt(),
                                    documentoIdentidadTXT.Text,
                                    ocupacionTXT.Text,
                                    GeneroDDL.SelectedValue.ToInt(),
                                    convivienteCHK.Checked,
                                    telefonoTxt.Text,
                                     celularTXT.Text,
                                     emailTextBox.Text,
                                     webTXT.Text,
                                     faxTXT.Text,
                                     estadoCivilDDL.SelectedValue.ToInt(),
                                     bitActivoCHK.Checked,
                                     estadoDDL.SelectedValue.ToInt(),
                                     correoAlternativoTXT.Text,
                                     comentarioTXT.Text,direccionTXT.Text,
                                     referenciaTXT.Text,
                                     urbanizaiconTXT.Text,
                                     distritoDDL.SelectedValue.ToInt(),
                                     conyyugeTXT.Text,
                                     dniConyugeTXT.Text,
                                     emailConyugeTXT.Text,
                                     telefonoConyugeTXT.Text);

            }
        }

        protected void button(object sender, EventArgs e)
        {
            
            try
            {

                if ((sender as Button).ID ==saveBTN.ID)
                {

                    if (type.Value == "E")   { Update(); }
                    if (type.Value == "A")    {Insert(); }

                    Response.Redirect("~/Admin/Cliente/ClienteReadForm.aspx?id={0}".Fmt(internalID.Value), true);
                }
                if ((sender as Button).ID == cancelarBTN.ID)
                {
                    Response.Redirect(paginaAnt.Value, true);
                }
                if ((sender as Button).ID ==refreshBTN.ID)
                {
                    FormatForm();
                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }




        }
        private void ShowAllComboBox()
        {



                    nacionalidadDDL.DataValueField = "idInternal";
                    nacionalidadDDL.DataTextField = "descripcion";
            
                    tipoDocumentoDDL.DataTextField = "descripcion";
                    tipoDocumentoDDL.DataValueField = "idInternal";

                    GeneroDDL.DataTextField = "descripcion";
                    GeneroDDL.DataValueField = "idInternal";
                
                    tipoDocumentoDDL.DataSource = DbUtil.Db.TipoDocumentos.ToList();
                    nacionalidadDDL.DataSource = DbUtil.Db.Nacionalidads.ToList();
                    GeneroDDL.DataSource = DbUtil.Db.GrupoDatoitems.Where(p => p.idGrupo == 12); //genero
                    estadoDDL.DataSource=DbUtil.Db.GrupoDatoitems.Where(p => p.idGrupo == 13); //genero


                    estadoDDL.DataValueField = "idInternal";
                    estadoDDL.DataTextField = "descripcion";
                    
            
                    nacionalidadDDL.DataBind();
                    tipoDocumentoDDL.DataBind();
                    GeneroDDL.DataBind();
                    estadoDDL.DataBind();



                    departamentoDDL.DataTextField = "VC_NOMBRE";
                    departamentoDDL.DataValueField = "IN_ID_CIU";

                    provinciaDDL.DataTextField = "VC_NOMBRE";
                    provinciaDDL.DataValueField = "IN_ID_PRO";

                    distritoDDL.DataTextField = "VC_NOMBRE";
                    distritoDDL.DataValueField = "IN_ID_DIS";

                    departamentoDDL.DataSource = DbUtil.Db.Ciudades.ToList();
                    departamentoDDL.DataBind();


                    estadoCivilDDL.DataTextField = "descripcion";
                    estadoCivilDDL.DataValueField = "idInternal";
                    estadoCivilDDL.DataSource = new BOL.ListValueBL().GetEstadoCivil(); ;
                    estadoCivilDDL.DataBind();
            

                    if (type.Value == "A")
                    {
                        //carga provincia y distrito
                        provinciaDDL.DataSource = DbUtil.Db.Provincias.Where(p => p.IN_ID_CIU == departamentoDDL.SelectedValue.ToInt());
                        provinciaDDL.DataBind();

                        distritoDDL.DataSource = DbUtil.Db.Distritos.Where(p => p.IN_ID_PRO == provinciaDDL.SelectedValue.ToInt());
                        distritoDDL.DataBind();

                       
                    }

        }

        private void LoadCliente()
        {
            DAL.Cliente cliente = DbUtil.Db.Clientes.Single(p => p.idInternal == internalID.Value.ToInt());

            if (cliente.bitEsJuridica == true)
            {
                empresaPanel.Visible = true;
                personaPanel.Visible = false;
                EsEmpresaCHK.SelectedValue = "1";
                empresaPanel.Visible = true;
                personaPanel.Visible = false;
                razonSocialTextBox.Text = cliente.razonSocial;
                RUCTXT.Text = cliente.numDocumento;
                
                


            }
            else
            {
                 EsEmpresaCHK.SelectedValue = "0";
                 empresaPanel.Visible = false;
                 personaPanel.Visible = true;
                 nombresTXT.Text=cliente.nombre;
                 apellidoPatTxt.Text=cliente.apellidoPat;
                 apellidoMatTXT.Text=cliente.apellidoMat;
                 nacionalidadDDL.SelectedValue=cliente.idNacionalidad.ToString();
                 tipoDocumentoDDL.SelectedValue=cliente.idTipoDocumento.ToString();
                 documentoIdentidadTXT.Text=cliente.numDocumento;
                 ocupacionTXT.Text=cliente.Ocupacion;
                 GeneroDDL.SelectedValue=cliente.idGenero.ToString();
                 convivienteCHK.Checked = cliente.bitConviviente.Value;
                 estadoCivilDDL.SelectedValue = cliente.idEstadoCivil.ToString();                

               
            }
            telefonoTxt.Text = cliente.telefono;
            celularTXT.Text = cliente.celular;
            emailTextBox.Text = cliente.email;
            webTXT.Text = cliente.web;
            faxTXT.Text = cliente.fax;
            bitActivoCHK.Checked = cliente.bitActivo;
            correoAlternativoTXT.Text = cliente.emailAlternativo;
            comentarioTXT.Text = cliente.comentario;
            estadoDDL.SelectedValue = cliente.idEstado.ToString();
            direccionTXT.Text = cliente.Direccion.descripcion;
            referenciaTXT.Text = cliente.Direccion.referencia;
            urbanizaiconTXT.Text = cliente.Direccion.urbanizacion;

            int idProvincia = cliente.Direccion.Distrito.IN_ID_PRO;
            int idDepartamento = cliente.Direccion.Distrito.Provincia.IN_ID_CIU;
            //para la carga del ubigeo
            provinciaDDL.DataSource = DbUtil.Db.Provincias.Where(p => p.IN_ID_CIU == idDepartamento);
            provinciaDDL.DataBind();

            departamentoDDL.DataSource = DbUtil.Db.Ciudades;
            departamentoDDL.DataBind();

            distritoDDL.DataSource = DbUtil.Db.Distritos.Where(p => p.IN_ID_PRO == idProvincia);
            distritoDDL.DataBind();


            distritoDDL.SelectedValue = cliente.Direccion.idDistrito.ToString();
            provinciaDDL.SelectedValue = idProvincia.ToString();
            departamentoDDL.SelectedValue = idDepartamento.ToString();

            
        }

        private void FormatForm()
        {

            //--------------------
            //int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
            //bool acceso = new DAL.FormularioAcceso().VerificarAcceso(DbUtil.Db,
            //    idEmpleadoEmisor,
            //    11, //Proveeedor
            //    2); //lectura
            ////------------------------- 
            //// los paneles presentes en el formulario
            //pnlMain.Visible = true;
            ShowAllComboBox();
            
            
            EsEmpresaCHK.SelectedValue = "0";
            empresaPanel.Visible = false;
            personaPanel.Visible = true;



            if (type.Value == "E")
            {
                LoadCliente();
            }
            if (type.Value == "A")
            {
                bitActivoCHK.Checked = true;
            }
        
           

        }

        protected void refreshPartida_Click(object sender, EventArgs e)
        {
            try
            {
                FormatForm();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
            

        }

      

        protected void EsEmpresaCHK_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (EsEmpresaCHK.SelectedValue == "1")
            {
                //caso de ser empresa
                personaPanel.Visible = false;
                empresaPanel.Visible = true;
            }
            else
            {
                personaPanel.Visible = true;
                empresaPanel.Visible = false;
            }
            empresaUP.Update();

        }



        protected void comboBox(object sender, EventArgs e)
        {
            try
            {
                if (((DropDownList)sender).ID == departamentoDDL.ID)
                {
                    int? idDepartamento = departamentoDDL.SelectedValue.ToInt2();
                    provinciaDDL.DataSource = DbUtil.Db.Provincias.Where(p => p.IN_ID_CIU == idDepartamento.Value);
                    provinciaDDL.DataBind();
                    int? idProyecto = provinciaDDL.SelectedValue.ToInt2();
                    distritoDDL.DataSource = DbUtil.Db.Distritos.Where(p => p.IN_ID_PRO == idProyecto);
                    distritoDDL.DataBind();
                    ubigeoUP.Update();

                }
                if (((DropDownList)sender).ID == provinciaDDL.ID)
                {
                    int? idProyecto = provinciaDDL.SelectedValue.ToInt2();
                    distritoDDL.DataSource = DbUtil.Db.Distritos.Where(p => p.IN_ID_PRO == idProyecto);
                    distritoDDL.DataBind();
                    ubigeoUP.Update();
                }
                //if (((DropDownList)sender).ID == tipoFinanciamientoDDL.ID)
                //{
                //    int tipoFin = tipoFinanciamientoDDL.SelectedValue.ToInt();
                //    MostrarPrograma(tipoFin);
                //}




            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        private void  showConyuge()
        {

         if (estadoCivilDDL.SelectedValue =="84" || convivienteCHK.Checked)  //casado
                {
                    
                    conyugePNL.Visible=true;
                    conyugeUPNL.Update();
          }
         else
         {
             conyyugeTXT.Text=string.Empty;
             dniConyugeTXT.Text=string.Empty;
             emailConyugeTXT.Text = string.Empty;
             telefonoConyugeTXT.Text = string.Empty;
             conyugePNL.Visible=false;
             conyugeUPNL.Update();
         }
        }

        protected void estadoCivilDDL_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {


             
                    showConyuge();

             

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        protected void convivienteCHK_CheckedChanged(object sender, EventArgs e)
        {
            try
            {



                showConyuge();



            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
       
    }
}